package controlador;

import classes.Evento;
import classes.EventoParticipante;
import classes.Imagem;
import classes.Servidor;
import dao.EventoDao;
import erro.ConexaoException;
import erro.ConsultaException;
import erro.GeralException;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 *
 * @author Roberta
 */
public class EventoControlador {

    private EventoDao dao;

    public EventoControlador() {

        this.dao = new EventoDao();
    }

    /**
     * 
     * @param e = Evento
     * @param ep = EventoParticipante
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws GeralException 
     */
    public void inserirEvento(Evento e, EventoParticipante ep, Imagem im) throws ConexaoException, ConsultaException, GeralException {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.add(GregorianCalendar.DAY_OF_MONTH, -1);
        Date hoje = calendar.getTime();
        Date data = e.getData();
        if (data.before(hoje)) {
            throw new GeralException("A data do evento deve ser maior que a data atual!");
        }

        if (ep.getParticipante().isEmpty() || e.getData() == null || e.getHora() == null || e.getLocal().trim().equals("") || e.getEvento().trim().equals("")) {
            throw new GeralException("Preencha todos os campos obrigatórios.");
        } else {
            this.dao.inserirEvento(e, ep, im);
        }
    }

    /**
     * 
     * @param e = Evento
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public Evento pesquisar(Evento e) throws ConexaoException, ConsultaException {
        return (Evento) this.dao.pesquisar(e);
    }

    public Imagem pesquisar(Evento e, Imagem img) throws ConexaoException, ConsultaException {
        return (Imagem) this.dao.pesquisar(e, img);
    }

    /**
     * 
     * @param e = Evento
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public Evento consultarid(Evento e) throws ConexaoException, ConsultaException {
        return (Evento) this.dao.consultarid(e);
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Evento> listar() throws ConexaoException, ConsultaException {
        return (ArrayList<Evento>) this.dao.listar();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<EventoParticipante> listarP() throws ConexaoException, ConsultaException {
        return (ArrayList<EventoParticipante>) this.dao.listarP();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Evento> listarParticipo() throws ConexaoException, ConsultaException {
        return (ArrayList<Evento>) this.dao.listarParticipo();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<EventoParticipante> listarEP(Evento e) throws ConexaoException, ConsultaException {
        return (ArrayList<EventoParticipante>) this.dao.listarEP(e);
    }

    public ArrayList<Servidor> listarEPS(Evento e) throws ConexaoException, ConsultaException {
        return (ArrayList<Servidor>) this.dao.listarEPS(e);
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Evento> listarLogado() throws ConexaoException, ConsultaException {
        return (ArrayList<Evento>) this.dao.listarLogado();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Evento> listarAbertos() throws ConexaoException, ConsultaException {
        return (ArrayList<Evento>) this.dao.listarAbertos();
    }

    /**
     * 
     * @return
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public ArrayList<Evento> listarEncerrados() throws ConexaoException, ConsultaException {
        return (ArrayList<Evento>) this.dao.listarEncerrados();
    }

    /**
     * 
     * @param e = Evento
     * @param ep = EventoParticipante
     * @throws ConexaoException
     * @throws ConsultaException 
     */
    public void deletarEvento(Evento e, EventoParticipante ep, Imagem img) throws ConexaoException, ConsultaException {
        this.dao.deletarEvento(e, ep, img);
    }

    /**
     * 
     * @param e = Evento
     * @param ep  = EventoParticipante
     * @throws ConexaoException
     * @throws ConsultaException
     * @throws GeralException 
     */
    public void alterarEvento(Evento e, EventoParticipante ep, Imagem img) throws ConexaoException, ConsultaException, GeralException {
        if (ep.getParticipante().isEmpty() || e.getData() == null || e.getHora() == null || e.getLocal().trim().equals("") || e.getEvento().trim().equals("")) {
            throw new GeralException("Preencha todos os campos obrigatórios.");
        } else {
            this.dao.alterarEvento(e, ep, img);
        }
    }

    public void alterarAberto(Evento e) throws ConexaoException, ConsultaException, GeralException {
        this.dao.alterarAberto(e);
    }
}
